"""
宿舍内务 plus
宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：

1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：打扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分
宿舍有六个人，上个月的内务完成情况如下：

老大：打扫厕所3次，扫地5次，擦窗户2次
老二：帮打饭4次，拖地3次，擦桌子1次
老三：帮签到2次，打扫厕所1次，扫地2次
老四：擦窗户3次，拖地2次，打扫厕所2次
老五：帮打饭2次，帮签到1次，擦桌子3次
老六：扫地4次，拖地4次，擦窗户1次
编写一个函数来统计所有人的分数并打印出来。然后找出最懒和最勤快的室友，计算最懒的室友至少需要帮打多少次饭才能追上最勤快的室友。

编程思路提示：
使用 sorted 函数对字典进行排序，然后取出第一个和最后一个元素，即可找出最懒和最勤快的室友。
sorted 函数的 key 参数可以指定排序的依据，lambda 函数可以用来指定排序的依据。例如：
    sorted(dorm_tasks.keys(), key=lambda x: dorm_tasks.get(x))  # 按照分数对室友名字进行排序
"""


class DormTaskAnalyzer:
    """宿舍内务分析类"""

    # 定义任务等级和分数对应关系
    TASK_SCORES = {
        "擦桌子": 1, "擦椅子": 1, "擦窗户": 1,
        "扫地": 2, "拖地": 2,
        "打扫厕所": 3,
        "帮全宿舍打饭": 4,
        "帮全宿舍签到": 5
    }

    def __init__(self):
        # 初始化宿舍成员任务记录
        self.records = {
            "老大": {"打扫厕所": 3, "扫地": 5, "擦窗户": 2},
            "老二": {"帮全宿舍打饭": 4, "拖地": 3, "擦桌子": 1},
            "老三": {"帮全宿舍签到": 2, "打扫厕所": 1, "扫地": 2},
            "老四": {"擦窗户": 3, "拖地": 2, "打扫厕所": 2},
            "老五": {"帮全宿舍打饭": 2, "帮全宿舍签到": 1, "擦桌子": 3},
            "老六": {"扫地": 4, "拖地": 4, "擦窗户": 1}
        }

    def calculate_score(self, tasks):
        """计算单个成员的总分"""
        return sum(self.TASK_SCORES[task] * count
                   for task, count in tasks.items())

    def analyze_scores(self):
        """分析所有成员的分数"""
        # 计算每个人的总分
        scores = {name: self.calculate_score(tasks)
                  for name, tasks in self.records.items()}

        # 找出最勤快和最懒的
        max_score = max(scores.values())
        min_score = min(scores.values())
        hardest = [name for name, score in scores.items() if score == max_score]
        laziest = [name for name, score in scores.items() if score == min_score]

        # 计算需要帮打饭的次数
        score_diff = max_score - min_score
        meals_needed = (score_diff + 3) // 4  # 向上取整

        return scores, hardest, laziest, meals_needed

    def display_results(self):
        """显示分析结果"""
        scores, hardest, laziest, meals_needed = self.analyze_scores()

        # 打印每个人的分数
        print("宿舍内务得分统计：")
        print("-" * 30)
        print(f"{'姓名':<10}{'得分':<10}")
        print("-" * 30)
        for name, score in sorted(scores.items(), key=lambda x: (-x[1], x[0])):
            print(f"{name:<10}{score:<10}")
        print("-" * 30)

        # 打印分析结果
        print(f"\n最勤快的室友: {', '.join(hardest)} ({scores[hardest[0]]}分)")
        print(f"最懒的室友: {', '.join(laziest)} ({scores[laziest[0]]}分)")
        print(f"\n要追上最勤快的室友，最懒的室友需要额外帮打{meals_needed}次饭")

        # 打印详细任务统计
        print("\n每个人的具体任务完成情况：")
        for name, tasks in self.records.items():
            print(f"\n{name}的任务：")
            for task, count in tasks.items():
                score = self.TASK_SCORES[task] * count
                print(f"  {task}: {count}次 ({self.TASK_SCORES[task]}分/次) = {score}分")


def main():
    analyzer = DormTaskAnalyzer()
    analyzer.display_results()


if __name__ == "__main__":
    main()
